def func(a, b, c=3, d=4):
   print("a:", a)
   print("b:", b)
   print("c:", c)
   print("d:", d)

print("按顺序传参调用函数：")
func(1, 2)  # 只传递必需的参数，使用默认参数
# 输出：
# a: 1
# b: 2
# c: 3
# d: 4

print("按顺序+关键字传参调用函数：")
func(1, 2, d=40)  # 只传递必需的参数，使用默认参数
# 输出：
# a: 1
# b: 2
# c: 3
# d: 40

print("按关键字传参调用函数：")
func(d=40, b=2, a=1)  # 只传递必需的参数，使用默认参数。没必要，建议采用按顺序+关键字传参调用函数
# 输出：
# a: 1
# b: 2
# c: 3
# d: 40

# 可变参数
def func2(*args, **kwargs):
   print("args:", args)
   print("kwargs:", kwargs)

print("\n传递可变参数调用函数：")
func2(1, 2, 3, a=4, b=5)
# 输出：
# args: (1, 2, 3)
# kwargs: {'a': 4, 'b': 5}



def student_info(name, age, *args, city="上海", **kwargs):
   print("name:", name)
   print("age:", age)
   print("args:", args)
   print("city:", city)
   print("kwargs:", kwargs)

print("\n传递多种参数调用函数：")
student_info("小月", 20, "数学", "科学", grade="三年级", hobby="编程")
# 输出：
# name: 小月
# age: 20
# args: ('数学', '科学')
# city: Shanghai
# kwargs: {'grade': '三年级', 'hobby': '编程'}